﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using DDay.iCal;
using DDay.iCal.Components;
using DDay.iCal.DataTypes;

using DataTransferObject;
using DataService;


namespace Engine.ScheduleAlgo
{
    public interface IScheduleAlgorithm
    {
        /// <summary>
        /// Does the schedule task list.
        /// </summary>
        /// <param name="tasks">The tasks.</param>
        /// <param name="mappedFreeTimeList">The mapped free time list.</param>
        /// <param name="systemConfiguration">The system configuration.</param>
        /// <param name="iCal">The i cal.</param>
        /// <param name="report">The report.</param>
        /// <returns></returns>
        List<Event> doScheduleTaskList(TaskList tasks, MappedFreeTimeList mappedFreeTimeList,
            SystemConfiguration systemConfiguration, iCalendar iCal, ref ScheduleReport report, int objectiveCase, JskeDataService dataService);

        /// <summary>
        /// Does the schedule task list.
        /// </summary>
        /// <param name="tasks">The tasks.</param>
        /// <param name="freeTimeList">The free time list.</param>
        /// <param name="systemConfiguration">The system configuration.</param>
        /// <param name="iCal">The i cal.</param>
        /// <param name="report">The report.</param>
        /// <returns></returns>
        List<Event> doScheduleTaskList(TaskList tasks, FreeTimeList freeTimeList,
            SystemConfiguration systemConfiguration, iCalendar iCal, ref ScheduleReport report);

    }
}
